int numDecodings(char * s)
{
    int i = 0;
    int size = 0;
    int res = 1;
    int res_1 = 1;
    int res_2 = 1;

    size = strlen(s);

    if (s[0] == '0')
    {
        return 0;
    }

    for(i = 1; i<size; i++)
    {
        if (s[i] == '0')
        {
            if ((s[i-1] == '1')||(s[i-1]) == '2')  
                res = res_2;  // ‘xxx20’ ‘xxx10’的情况，新加的字符只能和上一个字符拼在一起，组合数和去掉最后两个字符的字符串是一样的
            else    
                return 0; // ‘xxx30’ 'xxx00' 最后两个字符无法解码
        }
        else if ((s[i-1] == '1') || ((s[i-1] == '2')&&(s[i] < '7'))) 
            res = res_2 + res_1; // ‘xxxab' ab在1到26之间且不为10和20，可以组合在一起解码也可以拆，因此组合数等于’xxxa‘加上'xxx’的组合数
        else
        {
            res = res_1; // 'xxx01' 'xxx31' 等情况，新加的字符只能单独解码，组合数和不加这个字符时是一样的
        }
        res_2 = res_1;
        res_1 = res;
    }

    return res;
}